home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / OOP_Course / Labs / FruitView / Solution / Fruit.m < prev    next >
Encoding:
Text File  |  1995-06-12  |  2.4 KB  |  124 lines

  1. /* Objective_C Implementation of the Fruit Class: Fruit.m */
  2.  
  3. #import "Fruit.h"
  4.  
  5. @implementation Fruit
  6.  
  7. /* Initialize a new fruit. */
  8.  
  9. #define RED_TAG 0
  10. #define GREEN_TAG 1
  11. #define YELLOW_TAG 2
  12. #define RED 0.0            //black
  13. #define GREEN 0.4        //a dark gray
  14. #define YELLOW 0.7        //a very light gray
  15.  
  16. /* Intialize display to be showing correct current values. */
  17. -appDidInit:sender
  18. {
  19.     [self displayValues:self];
  20.     return self;
  21. }
  22.  
  23. - initFrame:(const NXRect *)frameRect
  24. {
  25.     [super initFrame:frameRect];
  26.     [self setDiameter:1];        // init the diameter
  27.     [self setColor:"red"];     // init the color
  28.     return self;            // return the new instance
  29. }
  30.  
  31. /* Action method for setting the color of the fruit. */
  32. -takeColorFrom:sender
  33. {
  34.     switch( [sender   selectedTag]){
  35.         case RED_TAG:        [self setColor:"red"];
  36.                             break;
  37.         case GREEN_TAG:        [self setColor:"green"];
  38.                             break;
  39.         case YELLOW_TAG:    [self setColor:"yellow"];
  40.                             break;
  41.         default:            break;
  42.     }
  43.     return self;
  44. }
  45.  
  46. /* Set the color of the fruit. */
  47. -setColor:(const char*)aColor
  48. {
  49.     color = aColor;
  50.     [self display];
  51.     return self;
  52. }
  53.  
  54. /* Return the fruit's color. */
  55. - (const char*)color
  56. {
  57.     return color;
  58. }
  59.  
  60. /* Action method for setting the diameter of the fruit. */
  61. -takeDiameterFrom:sender
  62. {
  63.     [self setDiameter:[sender intValue]];
  64.     return self;
  65. }
  66.  
  67. /* Set the fruit's diameter. */
  68. -setDiameter: (int) aSize
  69. {
  70.     diameter = aSize;
  71.     [self display];
  72.     return self;
  73. }
  74.  
  75. /* Return the fruit's diameter. */
  76. - (int) diameter
  77. {
  78.     return diameter;
  79. }
  80.  
  81. /* Tell the fruit to increase its diameter. */
  82. - grow:sender
  83. {
  84.     [self setDiameter:([self diameter] + 1)];
  85.     return self;
  86. }
  87.  
  88. - displayValues:sender
  89. {
  90.     [colorDisplay setStringValue:color];
  91.     [diameterDisplay setIntValue:diameter];
  92.     return self;
  93. }
  94.  
  95. /* This view only knows how to draw in three "colors". */
  96. - drawSelf:(const NXRect*)r :(int)c
  97. {
  98.     float side;
  99.  
  100.     PSsetgray(NX_LTGRAY);
  101.     NXRectFill(&bounds);        //"erase" to gray
  102.      
  103.      /* Set "color" according to that selected. */
  104.     if(strcmp(color,"red")==0) PSsetgray(RED);
  105.     else if(strcmp(color,"green")==0) PSsetgray(GREEN);
  106.     else if(strcmp(color,"yellow")==0) PSsetgray(YELLOW);
  107.     else PSsetgray(RED);    //default color
  108.     
  109.     side = [self diameter];
  110.      
  111.     /* Draw the fruit. */
  112.     PSnewpath();
  113.     PSmoveto(bounds.size.width/2.0-side/2.0, bounds.size.height/2.0-side/2.0);
  114.     PSrlineto(0.0, side);
  115.     PSrlineto(side,0.0);
  116.     PSrlineto(0.0,-side);
  117.     PSclosepath();
  118.  
  119.     PSfill();        //fill the defined path
  120.     return self;
  121. }
  122.  
  123. @end
  124.